package com.nys.conci.usuario.bean;

import com.nys.conci.backend.servicio.ControlCorreo;
import com.nys.conci.base.BeanBase;
import com.nys.conci.base.excepcion.ExcepcionManager;
import com.nys.conci.base.utilitario.EncriptaUtil;
import com.nys.conci.base.utilitario.EtiquetasUtil;
import com.nys.conci.base.utilitario.MensajeUtil;
import com.nys.conci.base.utilitario.Util;
import com.nys.conci.cliente.entidad.Persona;
import com.nys.conci.usuario.entidad.Usuario;
import com.nys.conci.usuario.servicio.ServicioControlUsuario;
import java.util.HashMap;
import javax.annotation.PostConstruct;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.inject.Inject;
import javax.mail.Message;
import javax.mail.internet.InternetAddress;

/**
 *
 * @author Yeudy10
 * @since 17/01/2013
 */
@ManagedBean
@ViewScoped
public class BeanRecuperarClave extends BeanBase {

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<     VARIABLES     >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    @Inject
    private ControlCorreo cc;
    @Inject
    private ServicioControlUsuario scu;
    private Usuario usuario;
    private String captcha;
    private String msjDialog;
    private String correo;

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<  INICIALIZARORES  >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    /**
     * Constructor
     */
    public BeanRecuperarClave() {
        this.inicializar();
    }

    /**
     * Inicializa las variables del bean, al acceder al constructor
     */
    private void inicializar() {
        try {
            this.usuario = new Usuario();
        } catch (Exception ex) {
            ExcepcionManager.manejarExcepcion(ex);
        }
    }

    /**
     * Inicializas las variables y atributos del bean, despues del llamado del
     * constructor. Es utilizado para las inicializaciones que utilicen datos de
     * objetos injectados.
     */
    @Override
    @PostConstruct
    public void inicializarPost() {
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<      MÉTODOS      >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    public void enviarNotificación() throws Exception {
        if (validaCampo()) {
            Persona persona = new Persona();
            persona = scu.consultarUsuarioCorreo("U", correo);
            Usuario us = scu.consultarUsuario(persona.getIdentificacion());
            String nuevaClave = Util.generarClave();
            us.setPass_word(EncriptaUtil.getInstancia().encriptar(nuevaClave, EncriptaUtil.Algoritmo.MD5));
            scu.guardarUsuario(us, true);
            String asunto = "Recuperación de contraseña";
            String cuerpo = "<div style='background: #A9E2F3; width: 400px; border-style: ridge; border-radius: 20px' >"
                    + "<div style='width: 350px'>"
                    + "<h2 style='color: #FE9A2E'>Control Citas</h2> "
                    + " <hr> "
                    + "</div> "
                    + "<table > "
                    + "     <tr> "
                    + "         <td> "
                    + "             <h3 style='color: #0040FF'>Bienvenido: "
                    + persona.getNombre() + " " + persona.getApellido1() + " " + persona.getApellido2()
                    + "</h3>                    "
                    + "             <h3 style='color: #0040FF'>Su contraseña es: <a style='color: #FF8000'>"
                    + nuevaClave
                    + "</a></h3> "
                    + "         </td> "
                    + "     </tr> "
                    + "</table>            "
                    + " </div>";

            HashMap<Message.RecipientType, InternetAddress[]> hasSet = new HashMap<Message.RecipientType, InternetAddress[]>();
            hasSet.put(Message.RecipientType.TO, new InternetAddress[]{new InternetAddress(correo)});
            cc.initServicioCorreo(asunto, cuerpo, hasSet);
            cc.enviarCorreo();

            correo = "";
            String mensaje = "La contraseña ha sido enviada a su correo";
            MensajeUtil.agregarMensajeInfo(mensaje);
        }
    }

    public String regresar() {
        return "/xhtml/plantillas/login";
    }

    private boolean validaCampo() {
        boolean resultado = true;
        if (correo == null || correo.trim().isEmpty()) {
            String mensaje = EtiquetasUtil.obtenerEtiqueta("campo.requerido.parametro", "Correo Usuario");
            MensajeUtil.agregarMensajeErrorComponente("form_conci:id_correo", mensaje);
            resultado = false;
        }
        if (correo != null && !correo.trim().equals("") && !scu.consultarExisteUsuarioCorreo("U", correo)) {
            String mensaje = "No existe un usuario con este correo electronico";
            MensajeUtil.agregarMensajeErrorComponente("form_conci:id_correo", mensaje);
            resultado = false;
        }
        
        if (!sonCamposValidos()) {
            resultado = false;
        }

        return resultado;
    }
    
        private boolean sonCamposValidos() {
        boolean continuar = true;
        msjDialog = "";
        if ((captcha == null) || (captcha.equals(""))) {            
            FacesContext.getCurrentInstance().addMessage("captchaItem", new FacesMessage("Error verificando el texto"));
            msjDialog += "Escriba correctamente el texto. ";
            continuar = false;
        }
        return continuar;
    }

//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
//<<<<<<<<<<<<<<<<<<<<<<<<<<<< GETTERS Y SETTERS >>>>>>>>>>>>>>>>>>>>>>>>>>>>
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<*******************<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    public Usuario getUsuario() {
        return usuario;
    }

    public void setUsuario(Usuario usuario) {
        this.usuario = usuario;
    }

    public String getCaptcha() {
        return captcha;
    }

    public void setCaptcha(String captcha) {
        this.captcha = captcha;
    }

    public String getMsjDialog() {
        return msjDialog;
    }

    public void setMsjDialog(String msjDialog) {
        this.msjDialog = msjDialog;
    }

    /**
     * @return the correo
     */
    public String getCorreo() {
        return correo;
    }

    /**
     * @param correo the correo to set
     */
    public void setCorreo(String correo) {
        this.correo = correo;
    }
}
